<?php

namespace JsonLowCode\UI;

use JsonLowCode\Schema;
use JsonLowCode\Traits\Props\HasAlignText;
use JsonLowCode\Traits\Props\HasStrong;
use JsonLowCode\Traits\Props\HasTag;
use JsonLowCode\Traits\Props\HasType;

/**
 * Text标签
 * @method static Text make(mixed $children = null) Text组件
 */
class Text extends Schema
{
    protected string $componentName = "NText";

    use HasAlignText, HasAlignText, HasTag, HasType, HasStrong;

    /**
     * @param mixed|null $children
     */
    public function __construct(mixed $children = null)
    {
        parent::__construct();
        $this->children($children);
    }

    /**
     * default
     * @return $this
     */
    public function primary(): static
    {
        return $this->type('default');
    }

    /**
     * default
     * @return $this
     */
    public function default(): static
    {
        return $this->type('default');
    }

    /**
     * 是否斜体
     * @param bool|string $bool
     * @return $this
     */
    public function italic(bool|string $bool = true): static
    {
        return $this->prop('italic', $bool);
    }

    /**
     * 文字下划线
     * @param bool|string $bool
     * @return $this
     */
    public function underline(bool|string $bool = true): static
    {
        return $this->prop('underline', $bool);
    }

    /**
     * 文字删除线
     * @param bool|string $bool
     * @return $this
     */
    public function delete(bool|string $bool = true): static
    {
        return $this->prop('delete', $bool);
    }

    /**
     * 代码模式
     * @param bool|string $bool
     * @return $this
     */
    public function code(bool|string $bool = true): static
    {
        return $this->prop('code', $bool);
    }

    /**
     * 需要被渲染为什么标签，在 code 和 delete 设定的情况下不生效
     * @param string $tag
     * @return $this
     */
    public function tag(string $tag = ''): static
    {
        return $this->prop('tag', $tag);
    }

}
